iT邦幫忙

2024 iThome 鐵人賽

DAY 8
2
AI/ ML & Data

dbt 修煉之路系列 第 8

用 macro 管理 BQ UDF 的缺點

  • 分享至 

  • xImage
  •  

上篇文章提到我們團隊是如何使用 macro 來在 dbt 上開發 BQ UDF,雖然有達到目的,但使用 macro 開發也有以下幾個缺點:

  1. 無法管理 UDF 間的上下游關係:當 UDF 有引用到其他 UDF 時,需要讓被引用的 UDF 先被創建,但我們是透過 git diff 捕捉有異動、新增檔案,順序不一定,可能導致,引用其他 UDF 的 UDF 先被創建,而導致錯誤
  2. 無法併發創建 UDF:目前做法是透過迴圈來一一創建 UDF,UDF 數量少時可能創建時間快,但如果 UDF 數量多就可能導致 CI/CD 時間增加
  3. 使用 UDF 無法區分環境:在 model 中使用 UDF 時只能寫死路徑,無法根據測試或正式環境來調整使用對應環境的 UDF

在後續繼續研究解法時,我們想到能否使用 model 來開發 UDF,如果使用 model 應該就能解決以上問題,但後來意外發現 dbt 的 materialization,就能使用 model 開發 UDF!

什麼是 materialization

dbt materialization 是將 models 實現在資料倉儲中的策略,定義了 dbt 模型如何在數據庫中被實現。官方預設有 5 種 materialization,常見的有 table, view, incremental:

  • Table (表格)
    • 每次運行時都會重新創建整個表格
    • 適用於完全刷新的數據集
  • View (視圖)
    • 創建數據庫視圖
    • 不存儲實際數據,每次查詢時重新計算
    • 適用於頻繁變化或需要最新數據的場景
  • Incremental (增量)
    • 只更新或插入新的/變更的記錄
    • 適用於大型、僅附加的數據集

除了官方預設的 materialization,也可以自行創建 materialization,dbt 官方也有出教學介紹

在下一篇將會詳細介紹 dbt 教學中是如何一步一步的建立 materialization。

參考


上一篇
在 dbt 管理 BigQuery UDF (下)
下一篇
實作 dbt materialization
系列文
dbt 修煉之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言